package controlador;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import modelo.servicios.InformacionBasica;
import modelo.servicios.Tanque;
import org.apache.log4j.Logger;

/**
 * Clase que controla el flujo de petróleo en el tanque actual
 * @author Eduardo
 */
public class FlujoPetroleo {

    public static boolean quemaPetroleo = false;
    
    private static boolean alarma = false;
    private static Logger logger = Logger.getLogger(FlujoPetroleo.class);

    
    /**
     * Método que permite direccionar el petróleo que llega al tanque
     * @param tanqueActual Objeto de la clase Tanque que contiene la información actual del tanque
     * @param nuevaEntrada Cantidad de petróleo que llega al tanque
     */
    public void direccionarPetroleo(Tanque tanqueActual, float nuevaEntrada) {
        InformacionBasica ib = (new Informacion()).obtenerInformacionBasica();

        /**
         * Si el tanque está sobre el 70% de su capacidad comienza la distribución
         */
        if (tanqueActual.getLts() > ib.getCapacidadTanque() * 0.70) {

            /**
             * Como el nivel actual del tanque es superior al 70% de su capacidad total, se hace
             * rollback de la entrada de petróleo más reciente, se almacena sólo el 30% de dicha
             * entrada y se reenvía el 70% restante al tanque adyacente
             */
            tanqueActual.setLts(tanqueActual.getLts() - nuevaEntrada);

            DecimalFormatSymbols dfs = new DecimalFormatSymbols();
            dfs.setDecimalSeparator('.');
            DecimalFormat df = new DecimalFormat("#.##", dfs);

            tanqueActual.setLts(Float.parseFloat(df.format((tanqueActual.getLts()
                    + (nuevaEntrada * 0.3)))));

            float litrosAlmacenados = Float.parseFloat(df.format(nuevaEntrada * 0.3));

            logger.info("Almacenando " + litrosAlmacenados + " litros equivalente al 30% de la "
                    + "nueva entrada de " + nuevaEntrada + " litros");
            System.out.println("Almacenando " + litrosAlmacenados + " litros equivalente al 30% de"
                    + " la nueva entrada de " + nuevaEntrada + " litros");

            Informacion i = new Informacion();
            i.actualizarNivel(tanqueActual);

            logger.info("El tanque " + i.consultarNivelActual().getId() + " contiene una cantidad "
                    + "actual de " + i.consultarNivelActual().getLts() + " litros de petroleo");
            System.out.println("El tanque " + i.consultarNivelActual().getId() + " contiene una "
                    + "cantidad actual de " + i.consultarNivelActual().getLts() + " litros de "
                    + "petróleo");

            /**
             * Iniciando un hilo para permitir la salida de petróleo a otro tanque
             */
            float cantidadAenviar = Float.parseFloat(df.format((float) (nuevaEntrada * 0.7)));
            
            if (cantidadAenviar >= 1) {
                EnvioMensajes envioPetroleoOT = new EnvioMensajes(cantidadAenviar);
            }

            /**
             * Verificando si el tanque actual superó su capacidad total y si, además, no se
             * encuentra quemando petróleo actualmente
             */
            if ((tanqueActual.getLts() > ib.getCapacidadTanque()) && (!quemaPetroleo)) {
                QuemaPetroleo quema = new QuemaPetroleo(tanqueActual);
                quemaPetroleo = true;
            }            
        }

        /**
         * Si el tanque está sobre el 70% de su capacidad y la alarma no ha sido activada, se activa
         */
        if ((tanqueActual.getLts() >= ib.getCapacidadTanque() * 0.70) && (!alarma)) {
            activarAlarma();
            logger.info("Activando la alarma del tanque");
            System.out.println("Activando la alarma del tanque");
        }
    }

    /**
     * Método que permite activar la alarma del tanque
     */
    public void activarAlarma() {
        alarma = true;
    }
}
